There are many circumstances in which it may be required for a software provider to determine whether or not a device, e.g. a mobile telephone, includes a proprietary software component. For this purpose, various methods of software tracing have been developed and implemented. In general, software tracing involves subjecting a device thought to contain traced software to a specified operation, hereinafter referred to as a trace trigger, such that a trace message (i.e. any unambiguous characterization of the presence of the traced software) will only be correctly issued if the traced software is present.
As a specific example, consider the case where the traced software component is a video decoder. For software tracing purposes, the traced software component may include a mechanism, whereby when a specific video stream is input for playback, a trace message is correctly displayed on a device only if the video decoder therein comprises the traced software. Otherwise, a different result, irrespective of what that is, will indicate that the video decoder does not comprise the traced software.
In another example, US Patent Application Publication No. 2003/0233547 describes a mechanism whereby when a software program is legally downloaded (under license) from a server and installed on a user's machine, the authorized user's machine is allocated a unique identification number and this identification number is embedded one or more times within the copy of the software program downloaded thereto. A Client Program is provided which, whenever the software program is to be executed, compares the identification number of the machine on which it is being run with the identification number embedded in the software program and will only permit execution of the software program if the two numbers match. Thus, if a further copy of the software program is illegally provided to another user's machine, it will not run thereon because the identification number embedded in the software program will not match the identification number assigned to the user's machine. Furthermore, the original user can be traced through the identification number embedded in the software program.
More generally, it is known to incorporate a trace message generator in the software component, wherein a trigger string is inserted into a compressed media content file and, when the media content file is played back by the software component, if the software component is not the traced software component, the trigger will be disregarded and the media content will be played back, whereas if the software component is the traced software component, the media decoder will recognize the trigger and cause a message generator to generate a specified trace message. However, the trace message file may be quite large, as will be the overhead due to the additional message generator, thereby increasing the overall overhead of the software component, which is not desirable.
Mechanisms of the above type are often referred to within the software industry as a “back door” and various back door mechanisms are known and commonly used to prevent unauthorized use of proprietary software.
Most media data formats are comprised of (at least) a user data field and a content field, wherein it is possible for data to be “hidden” in the user data field because conformant decoders/parsers are mandated to ignore data in this field. Thus, the user data field might, under some circumstances, be considered to be an appropriate part of a media data file in which to include a trace trigger. However, some specific difficulties are envisaged in implementing software tracing in this manner in media processing components such as video and audio decoders. One of the main difficulties is that such components do not have “direct” access to the device screen so as to enable a textual trace message to be displayed. Media processing components can only output the media format they are designed to produce, for example, a video decoder can only produce images (YUV frames), a music player can only output sound (PCM frames), etc. Thus, although a “trigger” could be provided in the user data field, it is not a simple matter to implement a sufficiently selective and specific trace message output.